package org.ceteca.explica.server.traceability;

import java.io.IOException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import javax.xml.parsers.ParserConfigurationException;

import org.ceteca.explica.core.InterfaceErrors;
import org.ceteca.explica.core.traceability.Tracer;
import org.ceteca.explica.core.traceability.TracerException;
import org.ceteca.explica.core.traceability.tree.TraceabilityTree;
import org.ceteca.explica.core.traceability.tree.parser.TraceabilityTreeParser;
import org.xml.sax.SAXException;

public class TracerImpl extends UnicastRemoteObject implements Tracer {
	private static final long serialVersionUID = 123456789;
	public TracerImpl() throws RemoteException {
		super();
/*		if (System.getSecurityManager() == null) {
            System.setSecurityManager(new SecurityManager());
        }

		try {
			// Se registra la clase con el servidor de registro de RMI en el host local
			// con el nombre "Almacen". Al no indicarse puerto se usará el puerto TCP 1099.
			System.out.println("Rebind del servidor!");
			Naming.rebind(InterfaceExplica.JNDI_INSTALLER_EXPORT_PORT, this);
		}
		catch (AccessException aEx) {
			System.err.println("Se rechazó el acceso. Su sistema no tiene los permisos necesarios para realizar la operación remota!");
			aEx.printStackTrace();
			System.exit(-1);
		}
		catch (MalformedURLException mEx) {
			System.err.println("La URL para el registro no es válida!");
			mEx.printStackTrace();
			System.exit(-1);
		}
*/
	}
	
	public TraceabilityTree buildTraceabilityTree(byte[] xmlContent) throws RemoteException, TracerException {
		try {
			TraceabilityTreeParser parser = new TraceabilityTreeParser(xmlContent);
			return parser.getTrTree();
		}
		catch (ParserConfigurationException pEx) {
			throw new TracerException(InterfaceErrors.ERR_TRACEABILITY_PARSING_GENERAL_ERROR, pEx);
		}
		catch (IOException ioEx) {
			throw new TracerException(InterfaceErrors.ERR_TRACEABILITY_PARSING_GENERAL_ERROR, ioEx);
		}
		catch (SAXException saxEx) {
			throw new TracerException(InterfaceErrors.ERR_TRACEABILITY_PARSING_GENERAL_ERROR, saxEx);
		}
	}
}
